from rest_framework import serializers
from goods.models import SKUImage, SKU
from fdfs_client.client import Fdfs_client
from django.conf import settings
from celery_tasks.detail_html.tasks import get_detail_html


class ImageSerializer(serializers.ModelSerializer):
    """
        图品表序列化器
    """
    # 关联嵌套序列化返回
    sku = serializers.PrimaryKeyRelatedField(read_only=True)

    class Meta:
        # 指定根据那个模型类生成序列化器字段
        model = SKUImage
        # 指定那些字段生成
        fields = ('id', 'image', 'sku')

    def create(self, validated_data):
        # self.context属性是个字典数据，里面保存了请求对象request
        sku_id = self.context['request'].data.get("sku")
        # 获取保存的图片数据
        image = validated_data.get("image")
        # 建立FastDFS的链接对象
        client = Fdfs_client(settings.FASTDFS_CONF)
        # 上传图片数据
        res = client.upload_appender_by_buffer(image.read())
        # 判断上传状态
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('图片上传失败')
        # 上传成功 获取返沪爹图片路径信息
        img_rul = res['Remote file_id']
        # 将路径信息保存在图片表
        image = SKUImage.objects.create(image=img_rul, sku_id=sku_id)
        # 调用详情页静态化方法
        sku_id = image.sku.id
        get_detail_html.delay(sku_id)
        # 返回图片表对象
        return image

    def update(self, instance, validated_data):
        # 获取保存的图片数据
        image = validated_data.get('image')
        # 建立FastDFS的链接对象
        client = Fdfs_client(settings.FASTDFS_CONF)
        # 上传图片数据
        res = client.upload_appender_by_buffer(image.read())
        # 判断上传状态
        if res['Status'] != 'Upload successed.':
            raise serializers.ValidationError('图片上传失败')
        # 上传成功 获取返沪爹图片路径信息
        img_rul = res['Remote file_id']
        # 更新图片路径
        instance.image = img_rul
        instance.save()
        # 调用详情页静态化方法
        sku_id = instance.sku.id
        get_detail_html.delay(sku_id)
        return instance
class SKUSeriazlier(serializers.ModelSerializer):
    """
        SKU表序列化器
    """
    class Meta:
        # 指定根据那个模型类生成序列化器字段
        model = SKU
        # 指定那些字段生成
        fields = ('id', 'name')
